package co.com.coomeva.adminEvaluacion.logica;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;

import co.com.coomeva.adminEvaluacion.modelo.entidades.Depto;
import co.com.coomeva.adminEvaluacion.modelo.entidades.DeptoId;
import co.com.coomeva.adminEvaluacion.modelo.entidades.Division;
import co.com.coomeva.adminEvaluacion.modelo.entidades.DivisionId;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EvaRoleCargo;
import co.com.coomeva.adminEvaluacion.modelo.entidades.EvaRoleCargoId;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.DeptoDAO;
import co.com.coomeva.adminEvaluacion.modelo.persistencia.DivisionDAO;
import co.com.coomeva.adminEvaluacion.modelo.util.DatabaseUtil;

public class DeptoLogica {
private static DeptoLogica deptoLogica = null;
	
	//Objeto con el que se accede a la BD
	private DeptoDAO deptoDAO = null;
	
	/**
	 * 
	 */
	public DeptoLogica() {
		deptoDAO = new DeptoDAO();
	}
	
	/**
	 * @return
	 */
	public static DeptoLogica getInstance()	{
		if(deptoLogica == null) {
			deptoLogica = new DeptoLogica();
		}
		return deptoLogica;
	}	
		
	/**
	 * @param divisionEmpresaCodigo
	 * @param divisionGerenCodigo
	 * @param gerenciaCodigo
	 * @param divisionCodigo
	 * @param divisionNombre
	 * @param divisionEstado
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<Depto> consultarDeptoXCiudad(Long divisionCodigo, Long deptoGerenCodigo) throws Exception {

		Session session = deptoDAO.getSession();
		List<Depto> valorList = new ArrayList<Depto>();
		
		try {
			Query qSelect = session.getNamedQuery("consulta_deptos");
			String strSql = qSelect.getQueryString();
			
			//sumarle las condicionales
			
			if (divisionCodigo != null && divisionCodigo.longValue() > 0) strSql = strSql + " AND DEPTO_DIVISION_CODIGO = '"+divisionCodigo+"'";						
			if (deptoGerenCodigo != null && deptoGerenCodigo.longValue() > 0) strSql = strSql + " AND DEPTO_GEREN_CODIGO = '"+deptoGerenCodigo+"'";
			
			//System.out.println("SQL DEPTOS: " + strSql);
						
			List list = DatabaseUtil.ejecutarConsulta(session, strSql);
				
			Depto objTemp;
			DeptoId objDeptoId;
			for (Iterator iter = list.iterator(); iter.hasNext();) {
				Object[] obj = (Object[]) iter.next();
		
				objTemp = new Depto();
				objDeptoId = new DeptoId();
				objDeptoId.setDeptoCodigo(new Long(obj[3].toString()));
				objDeptoId.setDeptoNombre(obj[4].toString());
				
				
				objTemp.setId(objDeptoId);
				valorList.add(objTemp);
			}
			

		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error consultando los registros");
		} finally {
			deptoDAO.getSession().clear();
			deptoDAO.getSession().close();
		}
		return valorList;
	}
}
